//! \file CParameterList.h
//! \brief TODO: Document
//!
//! TODO: document
// -----------------------------------------------------------------------------
//! This program is free software; you can redistribute it and/or
//! modify it under the terms of the GNU General Public License
//! as published by the Free Software Foundation; either version 2
//! of the License, or (at your option) any later version.
//!
//! This program is distributed in the hope that it will be useful,
//! but WITHOUT ANY WARRANTY; without even the implied warranty of
//! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//! GNU General Public License for more details.
//!
//! You should have received a copy of the GNU General Public License
//! along with this program; if not, write to the Free Software Foundation,
//! Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// -----------------------------------------------------------------------------

// Project Includes
#include "System.h"
#include "CParameter.h"

// Standard Includes
#include <vector>

#ifndef dCPARAMETER_LIST_H_
  #define dCPARAMETER_LIST_H_

  namespace code_sheriff
  {

    //! \class CParameterList CParameterList.h "CParameterList.h"
    //! \brief TODO: document
    //!
    //! TODO: document
    class CParameterList
    {

      //========================================================================
      public:
      //========================================================================

        //! \brief Class constructor.
        //!
        //! This is the class constructor.  The constructor instantiates an
        //! object instance of the class and initializes the instance for use.
        //!
        //! \b Example: \code
        //! CParameterList* pList = new CParameterList();
        //! \endcode
        CParameterList();

        //! \brief Class destructor.
        //!
        //! This is the class destructor.  The destructor destroys an object
        //! instance of the class and deallocates any memory that was used.
        //!
        //! \b Example: \code
        //! CParameterList* pList = new CParameterList();
        //! delete pList;
        //! \endcode
        virtual ~CParameterList();

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \param [in] Parameter
        //!   TODO: document
        //!
        //! \retval Error
        //!   Error code indicating the result of the requested operation.
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        TERROR append(CParameter Parameter);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \param [in] Value
        //!   TODO: document
        //!
        //! \retval Error
        //!   Error code indicating the result of the requested operation.
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        TERROR appendValueToLast(std::string Value);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \param [in] Key
        //!   TODO: document
        //! \param [out] Value
        //!   TODO: document
        //! \param [in] Index
        //!   TODO: document
        //!
        //! \retval Error
        //!   Error code indicating the result of the requested operation.
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        TERROR get(TKEY Key, std::string& Value, int Index = 0);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        void clear(void);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \retval Error
        //!   Error code indicating the result of the requested operation.
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        TERROR printAll(void);

      //========================================================================
      private:
      //========================================================================

        //! \brief TODO: document
        //!
        //! TODO: document; Mutex for protecting m_List
        CMutex m_Mutex;

        //! \brief TODO: document
        //!
        //! TODO: document
        std::vector<CParameter> m_List;
    };

  } // namespace code_sheriff

#endif // dCPARAMETER_LIST_H_
